// 高级类型

// 类型推论
export let x = 1
export let arr = [1, true, () => { }]

// 交叉类型（Intersection Types） : 交叉类型是将多个类型合并为一个类型
// 联合类型（Union Types）: 联合类型表示一个值可以是几种类型之一。
interface User {
	user: string
	age: number
}

interface PersonState {
	sex: string,
	code: number
}

export const u: User & PersonState = {
	user: '张三',
	age: 18,
	sex: '男',
	code: 100
}

export const u1: User | PersonState = {
	// user: '张三',
	// age: 18,
	sex: '男',
	code: 100
}

// 类型保护与区分类型（Type Guards and Differentiating Types）


// 类型断言
document.addEventListener('click', (e) => {
	(<HTMLElement>e.target).classList.remove('active');
	(e.target as HTMLElement).classList.remove('active')
})


// type 类型别名
type n = number
const num123: n = 123

